package com.loong.shop.controller.backend;

import com.loong.common.domain.BaseQuery;
import com.loong.common.mvc.BaseBackendController;
import com.loong.common.rest.Result;
import com.loong.common.validator.group.CommonInsert;
import com.loong.common.validator.group.CommonUpdate;
import com.loong.shop.common.backend.param.GoodsSizeNameParam;
import com.loong.shop.handler.GoodsSpecificationNameHandler;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Description: 处理后台商品规格名称请求的Controller
 * @Author: 刘群
 * @Date: 2020/10/27 8:55
 */
@RestController
@RequestMapping("manage/shop/specificationName")
public class GoodsSizeNameController extends BaseBackendController {

    @Resource
    private GoodsSpecificationNameHandler nameHandler;

    /**
     * 新增商品规格名称
     * @param param 商品规格名称封装的参数
     * @return 响应的结果
     */
    @PostMapping("save")
    public Result saveGoodsSpecificationName(@Validated({CommonInsert.class}) GoodsSizeNameParam param){
        param.setId(null);
        return handlerExecutor.execute(() -> nameHandler.saveGoodsSpecificationName(param));
    }

    /**
     * 更新商品规格名称
     * @param param 商品规格名称封装的参数
     * @return 响应的结果
     */
    @PostMapping("update")
    public Result updateGoodsSpecificationName(@Validated({CommonUpdate.class}) GoodsSizeNameParam param){
        return handlerExecutor.execute(() -> nameHandler.updateGoodsSpecificationName(param));
    }

    /**
     * 删除商品规格名称
     * @param idList 商品规格名称id集合
     * @return 响应的结果
     */
    @PostMapping("delete")
    public Result deleteGoodsSpecificationName(@RequestParam("idList") List<Long> idList){
        if (CollectionUtils.isEmpty(idList)) return null;
        return handlerExecutor.execute(() -> nameHandler.deleteGoodsSpecificationName(idList));
    }

    /**
     * 分页查询商品规格名称
     * @param query 查询参数
     * @return 响应的结果
     */
    @PostMapping("pageQuery")
    public Result pageQueryGoodsSpecificationName( BaseQuery query){
        return handlerExecutor.execute(() -> nameHandler.pageQueryGoodsSpecificationName(query));
    }
}
